package fbv.gui;

import java.io.IOException;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import fbv.commun.dataTools.servico.ObjetoVO;
import fbv.commun.excecoes.FBVException;
import fbv.distribuidora.cliente.servico.Cliente;
import fbv.distribuidora.sistema.delegate.SistemaDelegate;
import fbv.distribuidora.sistema.servico.Sistema;

/**
 * Servlet implementation class for Servlet: ServletCliente
 */
public class ServletCliente extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet, GuiPadrao {
	static final long serialVersionUID = 1L;

	private Sistema sistema;	
	private Map<String, String> dados;

	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public ServletCliente() {
		super();
	}   	

	private void getCampos(HttpServletRequest request){
		dados = new Hashtable<String, String>();

		dados.put(Cliente.FORM_CLIENTE_RAZAO_SOCIAL, request.getParameter(Cliente.FORM_CLIENTE_RAZAO_SOCIAL));
		dados.put(Cliente.FORM_CLIENTE_CNPJ, request.getParameter(Cliente.FORM_CLIENTE_CNPJ));
		dados.put(Cliente.FORM_CLIENTE_USUARIO, request.getParameter(Cliente.FORM_CLIENTE_USUARIO));		
		dados.put(Cliente.FORM_CLIENTE_SENHA, request.getParameter(Cliente.FORM_CLIENTE_SENHA));
		dados.put(Cliente.FORM_CLIENTE_ENDERECO_LOGRADOURO, request.getParameter(Cliente.FORM_CLIENTE_ENDERECO_LOGRADOURO));
		dados.put(Cliente.FORM_CLIENTE_ENDERECO_BAIRRO, request.getParameter(Cliente.FORM_CLIENTE_ENDERECO_BAIRRO));
		dados.put(Cliente.FORM_CLIENTE_ENDERECO_CEP, request.getParameter(Cliente.FORM_CLIENTE_ENDERECO_CEP));
		dados.put(Cliente.FORM_CLIENTE_ENDERECO_CIDADE, request.getParameter(Cliente.FORM_CLIENTE_ENDERECO_CIDADE));
		dados.put(Cliente.FORM_CLIENTE_ENDERECO_NUMERO, request.getParameter(Cliente.FORM_CLIENTE_ENDERECO_NUMERO));
		dados.put(Cliente.FORM_CLIENTE_ENDERECO_UF, request.getParameter(Cliente.FORM_CLIENTE_ENDERECO_UF));

	}

	private void encaminharSolicitacao(HttpServletRequest request, HttpServletResponse response, String retorn){

		try {
			sistema = SistemaDelegate.getInstancia();

			String url = "/painelAdmin/principal.jsp?";

			if(retorn.equals("atualizar")){
				url += "pagina=1&subPagina=2";
			}
			else if(retorn.equals("excluir")){
				url += "pagina=1&subPagina=3";
			}
			else{
				url += "pagina=1&subPagina=5";
			}

			RequestDispatcher rd = getServletContext().getRequestDispatcher(url);
			ObjetoVO clienteVO;

			clienteVO = sistema.consultarCliente(request.getParameter("cod"));

			request.setAttribute(Cliente.FORM_CLIENTE_ID, clienteVO.getChave());
			request.setAttribute(Cliente.FORM_CLIENTE_RAZAO_SOCIAL, clienteVO.getPropriedade(Cliente.FORM_CLIENTE_RAZAO_SOCIAL));
			request.setAttribute(Cliente.FORM_CLIENTE_CNPJ, clienteVO.getPropriedade(Cliente.FORM_CLIENTE_CNPJ));
			request.setAttribute(Cliente.FORM_CLIENTE_USUARIO, clienteVO.getPropriedade(Cliente.FORM_CLIENTE_USUARIO));
			request.setAttribute(Cliente.FORM_CLIENTE_SENHA, clienteVO.getPropriedade(Cliente.FORM_CLIENTE_SENHA));
			request.setAttribute(Cliente.FORM_CLIENTE_ENDERECO_LOGRADOURO, clienteVO.getPropriedade(Cliente.FORM_CLIENTE_ENDERECO_LOGRADOURO));
			request.setAttribute(Cliente.FORM_CLIENTE_ENDERECO_NUMERO, clienteVO.getPropriedade(Cliente.FORM_CLIENTE_ENDERECO_NUMERO));
			request.setAttribute(Cliente.FORM_CLIENTE_ENDERECO_BAIRRO, clienteVO.getPropriedade(Cliente.FORM_CLIENTE_ENDERECO_BAIRRO));
			request.setAttribute(Cliente.FORM_CLIENTE_ENDERECO_CIDADE, clienteVO.getPropriedade(Cliente.FORM_CLIENTE_ENDERECO_CIDADE));
			request.setAttribute(Cliente.FORM_CLIENTE_ENDERECO_CEP, clienteVO.getPropriedade(Cliente.FORM_CLIENTE_ENDERECO_CEP));
			request.setAttribute(Cliente.FORM_CLIENTE_ENDERECO_UF, clienteVO.getPropriedade(Cliente.FORM_CLIENTE_ENDERECO_UF));

			rd.forward(request, response);
			
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FBVException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		if(request.getParameter("opcao") != null){
			encaminharSolicitacao(request, response, request.getParameter("opcao"));
		}
		
		if(request.getParameter("acao") != null){
			if(request.getParameter("acao").equals("consultar")){
				try {
					sistema = SistemaDelegate.getInstancia();

					RequestDispatcher rd = getServletContext().getRequestDispatcher("/painelAdmin/principal.jsp?pagina=1&subPagina=4");
					Collection<ObjetoVO> clientesVO;

					clientesVO = sistema.consultarTodosClientes();

					request.setAttribute("clientes",clientesVO);

					rd.forward(request, response);

				}catch (Exception e) {
					e.printStackTrace();
				}		
			}
		}	
	} 

	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		sistema = SistemaDelegate.getInstancia();
		String acao = (String)request.getParameter(GuiPadrao.ACAO);
		String url = "ServletCliente?acao="; 

		if(acao != null)
		{
			try{
				if(acao.equals(GuiPadrao.ACAO_ADICIONAR)){
					getCampos(request);
					sistema.cadastrarCliente(dados);
					url = "/distribuidora/painelAdmin/principal.jsp?pagina=1&subPagina=1";
				}
				else if(acao.equals(GuiPadrao.ACAO_ALTERAR)){
					getCampos(request);
					dados.put(Cliente.FORM_CLIENTE_ID, request.getParameter(Cliente.FORM_CLIENTE_ID));
					sistema.alterarCliente(dados);
					url += "consultar";
				}
				else if(acao.equals(GuiPadrao.ACAO_CONSULTAR)){
					sistema.consultarCliente(request.getParameter(Cliente.FORM_CLIENTE_ID));
					url += "consultar";
				}
				else if(acao.equals(GuiPadrao.ACAO_EXCLUIR)){

					sistema.excluirCliente(Integer.parseInt(request.getParameter(Cliente.FORM_CLIENTE_ID)));
					url += "consultar";
				}
				response.sendRedirect(url);
			}
			catch (Exception e) {
				response.sendRedirect(url);
			}
		}
	}	
}
